home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / RKMLibsPrgs / preferences / showprefs.c < prev   
C/C++ Source or Header  |  1992-09-03  |  9KB  |  244 lines

  1. ;/* showprefs.c - Execute me to compile me with SAS C 5.10
  2. LC -b0 -d0 -cfis -v -j73 showprefs.c
  3. Blink FROM showprefs.o TO showprefs LIBRARY LIB:Amiga.lib
  4. quit
  5. */
  6.  
  7. /*
  8. Copyright (c) 1992 Commodore-Amiga, Inc.
  9.  
  10. This example is provided in electronic form by Commodore-Amiga, Inc. for
  11. use with the "Amiga ROM Kernel Reference Manual: Libraries", 3rd Edition,
  12. published by Addison-Wesley (ISBN 0-201-56774-1).
  13.  
  14. The "Amiga ROM Kernel Reference Manual: Libraries" contains additional
  15. information on the correct usage of the techniques and operating system
  16. functions presented in these examples.  The source and executable code
  17. of these examples may only be distributed in free electronic form, via
  18. bulletin board or as part of a fully non-commercial and freely
  19. redistributable diskette.  Both the source and executable code (including
  20. comments) must be included, without modification, in any copy.  This
  21. example may not be published in printed form or distributed with any
  22. commercial product.  However, the programming techniques and support
  23. routines set forth in these examples may be used in the development
  24. of original executable software products for Commodore Amiga computers.
  25.  
  26. All other rights reserved.
  27.  
  28. This example is provided "as-is" and is subject to change; no
  29. warranties are made.  All use is at your own risk. No liability or
  30. responsibility is assumed.
  31. */
  32.  
  33. /*
  34. ** showprefs.c - parse and show some info from an IFF Preferences file
  35. ** NOTE: This example requires upcoming 2.1 prefs/ include files.
  36. **
  37. ** IMPORTANT!! This example is not linked with startup code (eg. c.o).
  38. ** It uses strictly direct AmigaDOS stdio, and also demonstrates
  39. ** direct ReadArgs argument parsing.  Therefore it is a CLI-only
  40. ** example.  If launched from Workbench, packet errors would occur
  41. ** since the WbStartup message is still sitting in the process's
  42. ** pr_MsgPort, and the code would never be unloaded from memory.
  43. */
  44.  
  45. #include <exec/types.h>
  46. #include <dos/dos.h>
  47. #include <libraries/dos.h>
  48. #include <libraries/iffparse.h>
  49. #include <prefs/prefhdr.h>
  50. #include <prefs/font.h>
  51. #include <prefs/icontrol.h>
  52. #include <prefs/input.h>
  53. #include <prefs/overscan.h>
  54. #include <prefs/printergfx.h>
  55. #include <prefs/printertxt.h>
  56. #include <prefs/screenmode.h>
  57. #include <prefs/serial.h>
  58.  
  59. #include <clib/exec_protos.h>
  60. #include <clib/dos_protos.h>
  61. #include <clib/iffparse_protos.h>
  62.  
  63. struct ExecBase *SysBase;
  64. struct Library *DOSBase;
  65. struct Library *IFFParseBase;
  66.  
  67. static UBYTE *IFFErrTxt[] = {
  68.   "EOF",    /* (end of file, not an error) */
  69.   "EOC",     /* (end of context, not an error) */
  70.   "no lexical scope",
  71.   "insufficient memory",
  72.   "stream read error",
  73.   "stream write error",
  74.   "stream seek error",
  75.   "file corrupt",
  76.   "IFF syntax error",
  77.   "not an IFF file",
  78.   "required call-back hook missing",
  79.   NULL,     /* (return to client, never shown) */
  80. };
  81.  
  82. LONG main(void)
  83. {
  84.   struct RDArgs *readargs = NULL;
  85.   LONG rargs[2];
  86.   struct IFFHandle *iffhandle;
  87.   struct ContextNode *cnode;
  88.   struct StoredProperty *hdrsp;
  89.   struct StoredProperty *sp;
  90.   UBYTE *filename = NULL;
  91.   LONG ifferror, error = 0, rc = RETURN_OK;
  92.  
  93.   /* We must set up SysBase (we are not linked with startup code) */
  94.   SysBase = (*((struct Library **) 4));
  95.  
  96.   /* This no-startup-code example may not be used from Workbench */
  97.   if ((((struct Process *)FindTask(NULL))->pr_CLI)==NULL)
  98.         return(RETURN_FAIL);
  99.  
  100.   if (DOSBase = OpenLibrary("dos.library", 37)) {
  101.     if (IFFParseBase = OpenLibrary ("iffparse.library", 37)) {
  102.  
  103.       readargs = ReadArgs("FILE/A", rargs, NULL);
  104.       if( (readargs) && (rargs[0]) ) {
  105.  
  106.         filename = (UBYTE *)rargs[0];
  107.  
  108.         /* allocate an IFF handle */
  109.         if (iffhandle = AllocIFF()) {
  110.           /* Open the file for reading */
  111.           if (iffhandle->iff_Stream = (LONG)Open(filename, MODE_OLDFILE)) {
  112.             /* initialize the iff handle */
  113.             InitIFFasDOS (iffhandle);
  114.             if ((ifferror = OpenIFF (iffhandle, IFFF_READ)) == 0) {
  115.               PropChunk(iffhandle, ID_PREF, ID_PRHD);
  116.  
  117.               PropChunk(iffhandle, ID_PREF, ID_FONT);
  118.               PropChunk(iffhandle, ID_PREF, ID_ICTL);
  119.               PropChunk(iffhandle, ID_PREF, ID_INPT);
  120.               PropChunk(iffhandle, ID_PREF, ID_OSCN);
  121.               PropChunk(iffhandle, ID_PREF, ID_PGFX);
  122.               PropChunk(iffhandle, ID_PREF, ID_PTXT);
  123.               PropChunk(iffhandle, ID_PREF, ID_SCRM);
  124.               PropChunk(iffhandle, ID_PREF, ID_SERL);
  125.  
  126.               for (;;) {
  127.                 ifferror = ParseIFF(iffhandle, IFFPARSE_STEP);
  128.  
  129.                  if (ifferror == IFFERR_EOC)
  130.                    continue;
  131.                 else if (ifferror)
  132.                   break;
  133.  
  134.                 /* Do nothing is this is a PrefHeader chunk,
  135.                  * we'll pop it later when there is a pref
  136.                  * chunk.
  137.                  */
  138.                 if (cnode = CurrentChunk(iffhandle))
  139.                   if (cnode->cn_ID == ID_PRHD || cnode->cn_ID == ID_FORM)
  140.                     continue;
  141.  
  142.                 /* Get the preferences header, stored previously */
  143.                 hdrsp = FindProp(iffhandle, ID_PREF, ID_PRHD);
  144.  
  145.                 if (sp = FindProp(iffhandle, ID_PREF, ID_FONT)) {
  146.                   Printf("FrontPen:  %ld\n",
  147.                         ((struct FontPrefs *)sp->sp_Data)->fp_FrontPen);
  148.                   Printf("BackPen:   %ld\n",
  149.                         ((struct FontPrefs *)sp->sp_Data)->fp_BackPen);
  150.                   Printf("DrawMode:  %ld\n",
  151.                         ((struct FontPrefs *)sp->sp_Data)->fp_DrawMode);
  152.                   Printf("Font:      %s\n",
  153.                         (LONG)((struct FontPrefs *)sp->sp_Data)->fp_Name);
  154.                   Printf("ta_YSize:  %ld\n",
  155.                         ((struct FontPrefs *)sp->sp_Data)->fp_TextAttr.ta_YSize);
  156.                   Printf("ta_Style:  %ld\n",
  157.                         ((struct FontPrefs *)sp->sp_Data)->fp_TextAttr.ta_Style);
  158.                   Printf("ta_Flags:  %ld\n",
  159.                         ((struct FontPrefs *)sp->sp_Data)->fp_TextAttr.ta_Flags);
  160.                 } else   if (sp = FindProp(iffhandle, ID_PREF, ID_ICTL)) {
  161.                   Printf("TimeOut:   %ld\n",
  162.                         ((struct IControlPrefs *)sp->sp_Data)->ic_TimeOut);
  163.                   Printf("MetaDrag:  %ld\n",
  164.                         ((struct IControlPrefs *)sp->sp_Data)->ic_MetaDrag);
  165.                   Printf("WBtoFront: %ld\n",
  166.                         ((struct IControlPrefs *)sp->sp_Data)->ic_WBtoFront);
  167.                   Printf("FrontToBack: %ld\n",
  168.                         ((struct IControlPrefs *)sp->sp_Data)->ic_FrontToBack);
  169.                   Printf("ReqTrue:    %ld\n",
  170.                         ((struct IControlPrefs *)sp->sp_Data)->ic_ReqTrue);
  171.                   Printf("ReqFalse:    %ld\n",
  172.                         ((struct IControlPrefs *)sp->sp_Data)->ic_ReqFalse);
  173.                   /* etc */
  174.                 } else if (sp = FindProp(iffhandle, ID_PREF, ID_INPT)) {
  175.                   Printf("PointerTicks:      %ld\n",
  176.                         ((struct InputPrefs *)sp->sp_Data)->ip_PointerTicks);
  177.                   Printf("DoubleClick/Secs:  %ld\n",
  178.                         ((struct InputPrefs *)sp->sp_Data)->ip_DoubleClick.tv_secs);
  179.                   Printf("DoubleClick/Micro: %ld\n",
  180.                         ((struct InputPrefs *)sp->sp_Data)->ip_DoubleClick.tv_micro);
  181.                   /* etc */
  182.                 } else if (sp = FindProp(iffhandle, ID_PREF, ID_OSCN)) {
  183.                   Printf("DisplayID:  0x%lx\n",
  184.                         ((struct OverscanPrefs *)sp->sp_Data)->os_DisplayID);
  185.                   /* etc */
  186.                 } else if (sp = FindProp(iffhandle, ID_PREF, ID_PGFX)) {
  187.                   Printf("Aspect:     %ld\n",
  188.                         ((struct PrinterGfxPrefs *)sp->sp_Data)->pg_Aspect);
  189.                   /* etc */
  190.                 } else if (sp = FindProp(iffhandle, ID_PREF, ID_PTXT)) {
  191.                   Printf("Driver:     %s\n",
  192.                         (LONG)((struct PrinterTxtPrefs *)sp->sp_Data)->pt_Driver);
  193.                   /* etc */
  194.                 } else if (sp = FindProp(iffhandle, ID_PREF, ID_SCRM)) {
  195.                   Printf("DisplayID:  0x%lx\n",
  196.                         ((struct ScreenModePrefs *)sp->sp_Data)->sm_DisplayID);
  197.                   /* etc */
  198.                 } else if (sp = FindProp(iffhandle, ID_PREF, ID_SERL)) {
  199.                   Printf("BaudRate:   %ld\n",
  200.                         ((struct SerialPrefs *)sp->sp_Data)->sp_BaudRate);
  201.                   /* etc */
  202.                 }
  203.               }
  204.  
  205.               CloseIFF(iffhandle);
  206.             }
  207.  
  208.             if (ifferror != IFFERR_EOF) {
  209.               rargs[1] = (LONG)IFFErrTxt[-ifferror - 1];
  210.               VFPrintf(Output(), "%s: %s\n", rargs);
  211.               rc = RETURN_FAIL;
  212.             }
  213.  
  214.             Close(iffhandle->iff_Stream);
  215.           } else
  216.             error = IoErr();
  217.  
  218.           FreeIFF(iffhandle);
  219.         } else {
  220.           VFPrintf(Output(), "Can't allocate IFF handle\n", NULL);
  221.           rc = RETURN_FAIL;
  222.         }
  223.       } else
  224.         error = IoErr();
  225.       CloseLibrary(IFFParseBase);
  226.  
  227.  
  228.       SetIoErr(error);
  229.       if (error) {
  230.         rc = RETURN_FAIL;
  231.         PrintFault(error, filename ? filename : "");
  232.       }
  233.     }
  234.  
  235.     if(readargs) FreeArgs(readargs);
  236.     CloseLibrary(DOSBase);
  237.  
  238.   } else {
  239.       rc = RETURN_FAIL;
  240.     }
  241.  
  242.   return(rc);
  243. }
  244.